home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / DEF / Process / Clone / clone-section < prev    next >
Text File  |  1998-10-23  |  4KB  |  98 lines

  1. clone-section from to except-defaults except-instruments
  2.  
  3. This enables to clone a section into another section while introducing changes to the instrument classes. The following clones section a to section b as-is, except that the tonality and velocity in the section b will get new default values for all instruments, and synth's symbol class will get a new value, and cello's length will get a new value.
  4.  
  5. (clone-section a b
  6.    except
  7.       tonality (activate-tonality (major c 4))
  8.       velocity '(54 55 55)
  9.    synth
  10.       symbol '(a b c)
  11.    cello 
  12.       length '(1/16 1/16.)
  13. )
  14.  
  15. Except accepts any classes to be redefined, and all the instruments too. Instrument name can be a larger chunk, and the definitions will be inherited for all its instruments. The target section can also be a single section or a hypersection, in which case all the target sections will receive these new values. Notice how below all controllers of section a are changed, and that synth-group controllers are an exception.
  16.  
  17. (clone-section a middle-sections
  18.    except
  19.       tonality (activate-tonality (major c 4))
  20.       velocity '(54 55 55)
  21.       controller (mu80-controllers
  22.                    resonance (list '(115))
  23.                    filter (list (vector-round 60 100 (gen-sin 6 0.3 64 9))))
  24.    synth-group
  25.       symbol '(a b c)
  26.       length '(1/16 1/16.)
  27.       controller (mu80-controllers
  28.                    resonance (list '(115))
  29.                    filter (list (vector-round 60 100 (gen-sin 1 0.3 64 90))))
  30. )
  31.  
  32. How to clone a section to another and turn all classes around?
  33.  
  34. (def-section sect-a
  35.   synth1
  36.     symbol '(a b c)
  37.     zone '(2/1 1/1)
  38.     tonality (activate-tonality (major c 4) (major c 6))
  39.     length '((1/8 1/16) (1/4 1/4))
  40.     velocity '(64)
  41.   synth2
  42.     symbol '(aa bb cc)
  43.     zone '(22/1 11/1)
  44.     tonality (activate-tonality (major c 4) (major c 6))
  45.     length '((11/8 11/16) (11/4 11/4))
  46.     velocity '(14)
  47. )
  48.  
  49. To make global processes all classes you must define each class separately. Here you see how tonality, symbol, lenght, velocity and durations are processed.
  50.  
  51. Notice the difference between do-section and doing the operation directly to same-as.
  52.  
  53. 1. If you have zone lists then do-section turns each zone contents around.
  54.  
  55. (clone-section sect-a sect-b
  56.    except
  57.       tonality (reverse (same-as sect-a))
  58.       symbol (do-section :all '(symbol-retrograde x) (same-as sect-a))
  59.       length (do-section :all '(symbol-retrograde x) (same-as sect-a))
  60.       velocity (do-section :all '(symbol-retrograde x) (same-as sect-a))
  61.       duration (do-section :all '(symbol-retrograde x) (same-as sect-a))
  62. )
  63.  
  64. (same-as length of synth1 in sect-a) 
  65. --> ((1/8 1/16) (1/4 1/4))
  66.  
  67. (same-as length of synth1 in sect-b) 
  68. --> ((1/16 1/8) (1/4 1/4))
  69.  
  70. 2. But if you use 
  71.  
  72. (clone-section sect-a sect-b
  73.    except
  74.       tonality (reverse (same-as sect-a))
  75.       symbol (reverse (same-as sect-a))
  76.       length (reverse (same-as sect-a))
  77.       velocity (reverse (same-as sect-a))
  78.       duration (reverse (same-as sect-a))
  79. )
  80.  
  81. (same-as length of synth1 in sect-a) 
  82. --> ((1/8 1/16) (1/4 1/4))
  83.  
  84. (same-as length of synth1 in sect-b) 
  85. --> ((1/4 1/4) (1/8 1/16))
  86.  
  87. So, why to use do-section when you could use a function directly to the same-as? This is because do-section enables to target the operation to a given range, and it also ensures that if the class contains zoned list that all them are processed.
  88.  
  89. If you have zone lists and want to turn both their zone values and the whole zones around use
  90.  
  91. (clone-section sect-a sect-b
  92.    except
  93.       length (reverse (do-section :all 
  94.                                   '(symbol-retrograde x)
  95.                                   (same-as sect-a)))
  96. )
  97.  
  98.